Repository navigation
Upgrade libuv to 1.53.0 via the rescript-lang/luv fork - #8883
Merged
Merged
Conversation
The opam override for Luv now fetches commit 8c12b1a of rescript-lang/luv (PR rescript-lang/luv#2) instead of patching the upstream 0.5.14 tarball. The fork vendors libuv 1.53.0 instead of 1.48.0 and already carries the ARM64 musl -mno-outline-atomics fix, so the local patch is gone. The package is versioned 0.5.14+rescript.1 and dune-project/rescript.opam pin that version. Review: Why a git URL and not a release tarball? The fork keeps libuv as a git submodule; GitHub archives omit submodules, while opam's git fetch initializes them. The commit hash should move to the merge commit once rescript-lang/luv#2 lands. Review: Does the OCaml rewatch use any changed Luv API? Only FS_event, Loop, Timer, Handle and Error (native_watcher.ml). The fork's API change (statfs reserved fields read as zero) does not reach it. Area: rewatch ci Output: unchanged Tests: none, because no observable behavior changes; the shared rewatch suite (113 checks, incl. watch mode), the rewatch-ocaml focused suite and scripts/test.js -ounit -build -mocha -docstrings pass on the new libuv Measured: watch edit latency, median of 21 interleaved edits (basic fixture) 99 -> 100 ms, A/A control 98 ms; 400-directory fixture 98 -> 102 ms, A/A control 100 ms; watch cold start, median of 7 (400 dirs) 213 -> 211 ms, A/A 212 ms; idle watcher CPU over 20 s 70-90 ms for all; clean build (400 modules), median of 9, 180 -> 180 ms; linux-arm64 devcontainer under load, job tmp watch_ab.py and clean_ab.py Signed-off-by: Christoph Knittel <ck@cca.io> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9Q6perkzKBQQebDnVXAEK
The Luv override now fetches 2094c025, the merge commit of rescript-lang/luv#2 and the fork's master tip, instead of the PR head 8c12b1a. Both commits have the same tree (7acc6c6d), so the built sources are identical. Area: ci Output: unchanged Tests: none, because the fetched source tree is identical to the tested one Signed-off-by: Christoph Knittel <ck@cca.io> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9Q6perkzKBQQebDnVXAEK
cknitt
force-pushed
the
luv-libuv-1.53
branch
from
October 17, 2026 07:40
80593ac to
20c7647
Compare
cknitt
marked this pull request as ready for review
October 17, 2026 07:40
rescript
@rescript/belt
@rescript/darwin-arm64
@rescript/darwin-x64
@rescript/linux-arm64
@rescript/linux-x64
@rescript/runtime
@rescript/win32-x64
commit: |
fhammerschmidt
approved these changes
Oct 17, 2026
The devcontainer's postCreate.sh and the CONTRIBUTING setup steps now add .github/opam-repository as the rescript-overrides repository before `opam install .`, as the CI setup action does. luv.0.5.14+rescript.1 exists only there, so without it the solver finds no Luv; this used to go unnoticed because luv.0.5.14 is also in the default repository. Review: Is it safe when postCreate runs again? Adding an already registered name and URL succeeds and changes nothing (checked with opam 2.5.0). Area: ci docs Output: unchanged Tests: none, because the test-devcontainer CI job exercises postCreate.sh Signed-off-by: Christoph Knittel <ck@cca.io> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9Q6perkzKBQQebDnVXAEK
cknitt
enabled auto-merge (squash)
October 18, 2026 06:19
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #8883 +/- ##
==========================================
+ Coverage 80.98% 81.04% +0.05%
==========================================
Files 455 455
Lines 63390 63502 +112
==========================================
+ Hits 51339 51463 +124
+ Misses 12051 12039 -12 🚀 New features to boost your workflow:
|
rescript.opam (from rescript.opam.template) now pins luv.0.5.14+rescript.1 to the rescript-lang/luv commit via pin-depends, so `opam install .` fetches it in CI, the devcontainer and local setups alike. The .github/opam-repository overlay, its registration in the CI setup action, in postCreate.sh and in CONTRIBUTING, and its cache-key entry are removed; the cache key still changes with the pin through rescript.opam. Review: Does --deps-only apply pin-depends? Yes: with no overlay registered, `opam install . --deps-only --with-test` (opam 2.5.0) pinned and installed luv.0.5.14+rescript.1 at 2094c025, with libuv 1.53.0. Area: ci docs Output: unchanged Tests: none, because CI's opam setup and the test-devcontainer job exercise the pin Signed-off-by: Christoph Knittel <ck@cca.io> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9Q6perkzKBQQebDnVXAEK
|
Developer playground preview: https://rescript-lang.github.io/rescript/dev-playground/?version=pr-8883 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Upgrades the libuv used by the OCaml rewatch from 1.48.0 to 1.53.0 by building Luv from the rescript-lang/luv fork (rescript-lang/luv#2).
rescript.opam(viarescript.opam.template) pinsluv.0.5.14+rescript.1to the fork by commit hash (2094c025, the merge commit of Upgrade libuv to 1.53.0 and test native watcher APIs luv#2) withpin-depends, soopam install .fetches it in CI, the devcontainer and local setups without extra steps.dune-projectrequires that version..github/opam-repositoryoverlay is removed: the fork already contains its ARM64 musl-mno-outline-atomicsfix.+rescript.2with a new hash.Luv.File.Statfsreserved fields now read as zero) doesn't affect us: rewatch only usesFS_event,Loop,Timer,HandleandErrorinnative_watcher.ml.Existing dev switches get the pinned Luv with the usual
opam install . --deps-only --with-test.Performance is unchanged: watch latency, watcher startup, idle CPU and clean builds measured the same as with libuv 1.48 (Linux only; macOS and Windows weren't measured).
No new tests: there's no observable behavior change, and the existing watch tests in the shared rewatch suite cover the watcher.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Q9Q6perkzKBQQebDnVXAEK